package com.kaifamiao.wendao.dao;

import java.util.List;

/**
 * 定义 Dao 类中的通用方法
 * @param <T> 类型参数 T 表示实体类的类型
 * @param <P> 类型桉树 P 表示实体类中对象标识符的类型
 */
public interface Dao<T,P> {

    /**
     * 根据 id 查询数据库并返回 T类型的对象
     * @param id 需要查询的数据库主键值
     * @return 返回与 id 对应的 T 类型 对象
     */
    T find( P id ) ;

    /**
     * 获取指定表中所有数据对应的 T 类型对象组成的 List 集合
     * @return
     */
    List<T> findAll() ;

    /**
     * 将 T 类型的对象保存到数据库中
     * @param t 被保存的对象
     * @return 仅当保存成功时返回 true
     */
    boolean save( T t );

    /**
     * 根据参数指定的T类型对象来更新数据库表中的数据
     * @param t 被修改的对象(该对象中的数据需要同步到数据库中)
     * @return 仅当修改成功时返回 true ，否则返回 false
     */
    boolean update( T t );

    /**
     * 根据主键删除数据库中相应的记录
     * @param id 被删除数据对应的主键值
     * @return 仅当删除成功时返回 true
     */
    boolean remove( P id );

}
